/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Parser;

import Parser.Validador.*;

/**
 * Valida el tipo de etiqueta XML leida
 * @author Administrador
 */
public class ClasificadorEtiqueta {

    //Constantes que corresponden a cada una de las partes que nos podemos encontrar dentro de un XML
    public static final int TAG_INICIO          = 0;
    public static final int TAG_FINAL           = 1;
    public static final int TAG_AUTOCONTENIDO   = 2;
    public static final int CONTENIDO           = 3;
    public static final int XML_PROLOGO         = 4;
    public static final int COMENTARIO          = 5;
    public static final int DTD_INFO            = 6;
    public static final int CONTENIDO_CDATA     = 7;
    public static final int INVALIDO            =-1;


/**
 * Este metodo clasifca la cadena recibida por parametro para determinar a que tipo de etiqueta o dato corresponde
 * @param str cadena a evaluar
 * @return int que representa el tipo de elemento evaluado, -1 invàlido
 */
    public int clasificar(String str) {
        // Variable de la interface genérica que luego implementa cada uno de los validadores existentes
        IValidador validador=null;

        //valor que representa el tipo de tag leido. Por defecto, devuelve invalido
        int devolver=ClasificadorEtiqueta.INVALIDO;

        //ver el for indice mayor
        for (int i= 0; i < 8; i++) {
            switch (i)
            {
                case 0:
                    //Validador para verificar si es un comentario
                    validador=new ValidadorComentario();
                    devolver=ClasificadorEtiqueta.COMENTARIO;
                    break;
                case 1:
                    //Validador para verificar si es un contenido
                    validador=new ValidadorContenido();
                    devolver=ClasificadorEtiqueta.CONTENIDO;
                    break;
                case 2:
                    //Validador para verificar si es un prologo
                    validador=new ValidadorPrologo();
                    devolver=ClasificadorEtiqueta.XML_PROLOGO;
                    break;
                case 3:
                    //Validador para verificar si es un autocontenido
                    validador=new ValidadorTagAutoContenido();
                    devolver=ClasificadorEtiqueta.TAG_AUTOCONTENIDO;
                    break;
                case 4:
                    //Validador para verificar si es un tag de fin
                    validador=new ValidadorTagFinal();
                    devolver=ClasificadorEtiqueta.TAG_FINAL;
                    break;
                case 5:
                    //Validador para verificar si es un tag de incio
                    validador=new ValidadorTagInicio();
                    devolver=ClasificadorEtiqueta.TAG_INICIO;
                    break;
                case 6:
                    //Validador para verificar si es informacion del DTD
                    validador=new ValidadorDTD();
                    devolver=ClasificadorEtiqueta.DTD_INFO;
                    break;
                case 7:
                    //Validador para verificar si es CDATA
                    validador=new ValidadorContenidoCDATA();
                    devolver=ClasificadorEtiqueta.CONTENIDO_CDATA;
                    break;

            }
            //Verifica si corresponde a ese tipo, en caso afirmativo devuelve el int que lo representa
            if (validador.validar(str))
                return  devolver;
        }
        return ClasificadorEtiqueta.INVALIDO;
    }
}
